package gcp.gui.modelos;

import gcp.Colecionavel;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

/**
 * ColecionavelTableModel<br>
 * Modelo para criacao de tabelas para exibicao de itens colecionaveis.
 * @author Hildegard Naara Furtado da Costa.
 */
public class ColecionavelTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    private List<Colecionavel> itens;

    public static final int TITULO = 0;
    public static final int ESTADO = 1;
    public static final int TIPO = 2;

    /**
     * Construtor default.
     */
    public ColecionavelTableModel() {
        itens = new ArrayList<Colecionavel>();
    }

    /**
     * Retorna o numero de colunas da ColecionavelTableModel.
     * @return Numero de colunas da ColecionavelTableModel.
     */
    public int getColumnCount() {
        return 3;
    }

    /**
     * Retorna o numero de linhas da ColecionavelTableModel.
     * @return Numero de linhas da ColecionavelTableModel.
     */
    public int getRowCount() {
        return itens.size();
    }

    /**
     * Retorna o valor da celula na posicao indicada na ColecionavelTableModel.
     * @param linha Numero da linha da ColecionavelTableModel.
     * @param coluna Numero da coluna da ColecionavelTableModel.
     * @return Valor da celula da ColecionavelTableModel.
     */
    public Object getValueAt(int linha, int coluna) {
        Colecionavel item = get(linha);
        switch (coluna) {
        case ESTADO:
            return item.getItemEstado();
        case TIPO:
            return item.getClass().getSimpleName();
        case TITULO:
            return item.getTitulo();
        }
        return null;
    }

    /**
     * Retorna o nome da coluna indicada da ColecionavelTableModel.
     * @param coluna Numero da coluna da ColecionavelTableModel.
     * @return Nome da coluna da ColecionavelTableModel.
     */
    @Override
    public String getColumnName(int coluna) {
        switch (coluna) {
        case ESTADO:
            return "Estado";
        case TIPO:
            return "Tipo";
        case TITULO:
            return "Título";
        }
        return "";
    }

    /**
     * Retorna o item colecionavel da linha indicada na ColecionavelTableModel.
     * @param linha Numero da linha na ColecionavelTableModel.
     * @return Item colecionavel.
     */
    public Colecionavel get(int linha) {
        return itens.get(linha);
    }

    /**
     * Retorna a lista de itens colecionaveis em exibicao na
     * ColecionavelTableModel.
     * @return List<Colecionavel> itens - Lista de itens.
     */
    public List<Colecionavel> getItens() {
        return itens;
    }

    /**
     * Define a lista de itens colecionaveis a serem exibidos na
     * ColecionavelTableModel.
     * @param itens Lista de itens colecionaveis.
     */
    public void setItens(List<Colecionavel> itens) {
        if (itens != null)
            this.itens = itens;
        // Avisa a interface que a lista de itens foi alterada.
        fireTableDataChanged();
    }
}